// 岗位类型映射表
const scenarioLabels = {
    'ai-engineer': '人工智能工程师',
    'big-data-analyst': '大数据分析师',
    'iot-specialist': '物联网专家',
    'product-manager': '产品经理'
};


// 全局变量
let isPaused = false; // 是否处于暂停状态
// 评分维度
const ratingLabels = ['知识专业水平', '技能匹配度', '语言表达能力', '逻辑思维能力', '创新能力', '应变抗压能力'];

// 初始得分（可基于 AI 或用户输入）
let currentScores = [8, 7, 9, 6, 5, 7]; // 示例数据
let allowAnalysisAccess = false;




function showSection(sectionId) {
  if (!allowAnalysisAccess && sectionId === 'analysis-results') {
        alert('请先完成录制再查看分析结果');
        return;
    }
  document.querySelectorAll('.section').forEach(section => {
      section.style.display = 'none';
  });
  document.getElementById(sectionId).style.display = 'block';
}

// 全局变量扩展
let mediaRecorder;
let recordedChunks = [];
let startTime = null;  // 录制开始时间戳
let timerInterval = null;  // 定时器引用

// 启动时间计数器
function startTimer() {
  const timerElement = document.getElementById('recording-timer');
  startTime = Date.now();
  
  // 清除可能存在的旧定时器
  if (timerInterval) clearInterval(timerInterval);
  
  // 每秒更新时间显示
  timerInterval = setInterval(() => {
    const elapsed = Date.now() - startTime;
    const minutes = Math.floor(elapsed / 60000).toString().padStart(2, '0');
    const seconds = Math.floor((elapsed % 60000) / 1000).toString().padStart(2, '0');
    timerElement.textContent = `${minutes}:${seconds}`;
  }, 1000);
}

// 停止时间计数器
function stopTimer() {
  if (timerInterval) {
    clearInterval(timerInterval);
    timerInterval = null;
    document.getElementById('recording-timer').textContent = '00:00';
  }
}


// 在全局变量中添加题目库
const interviewQuestions = {
  "ai-engineer": [
    "请解释深度学习与传统机器学习的区别",
    "如何处理训练数据中的类别不平衡问题",
    "请描述反向传播算法的工作原理"
  ],
  "big-data-analyst": [
    "请说明Hadoop和Spark的核心区别",
    "如何设计实时数据处理流水线",
    "请解释Lambda架构的优缺点"
  ],
  "iot-specialist": [
    "物联网系统中MQTT协议的优势是什么",
    "如何保障智能设备的数据安全",
    "请说明边缘计算与云计算的协同方式"
  ],
  "product-manager": [
    "如何制定产品的MVP方案",
    "请描述用户画像的构建方法",
    "如何处理产品迭代中的需求变更"
  ]
};



async function initializeCamera() {
  try {
    const video = document.getElementById('video-preview');
    const stream = await navigator.mediaDevices.getUserMedia({ 
      video: true, 
      audio: true 
    });
    video.srcObject = stream;
    
    // 初始化 MediaRecorder
    mediaRecorder = new MediaRecorder(stream);
    
    mediaRecorder.ondataavailable = (event) => {
      if (event.data.size > 0) {
        recordedChunks.push(event.data);
      }
    };
    
    mediaRecorder.onstop = () => {
      const blob = new Blob(recordedChunks, { type: 'video/webm' });
      const url = URL.createObjectURL(blob);
      
      // 这里可以添加上传逻辑或显示回放
      console.log('录制完成，文件大小:', blob.size);
      recordedChunks = [];
    };
  } catch (err) {
    console.error('无法访问摄像头:', err);
    alert('无法启动摄像头，请检查设备权限');
  }
}


// 修改后的录制函数
function startRecording() {
  if (mediaRecorder && mediaRecorder.state === 'inactive') {
    recordedChunks = [];
    mediaRecorder.start();
    
    // 启动时间计数器
    startTimer();
    startRealTimeScoring(); // 开始模拟实时打分
    // ✅ 开始模拟实时打分
    startRealTimeScoring();
    
    document.querySelectorAll('.recording').forEach(btn => btn.disabled = false);
  }
}


function pauseRecording() {
  if (mediaRecorder && mediaRecorder.state === 'recording') {
    mediaRecorder.pause();
    
    isPaused = true;

     // 改变按钮文字
        const pauseBtn = document.querySelector('button[onclick="pauseRecording()"]');
        if (pauseBtn) {
            pauseBtn.textContent = '继续录制';
            pauseBtn.classList.add('resuming'); // 可选：标记当前是继续状态
        }
    // 停止时间计数器但保留当前时间
    if (timerInterval) clearInterval(timerInterval);
  }
}

function continueRecording() {
    if (mediaRecorder && mediaRecorder.state === 'paused') {
        mediaRecorder.resume();

        isPaused = false;

        // 恢复时间计数器
        startTimer();

        // 恢复按钮文字
        const pauseBtn = document.querySelector('button[onclick="pauseRecording()"]');
        if (pauseBtn) {
            pauseBtn.textContent = '暂停录制';
            pauseBtn.classList.remove('resuming');
        }
    }
}
function stopRecording() {
 
     // ✅ 新增：检查是否处于录制状态
  if (!mediaRecorder || !['recording', 'paused'].includes(mediaRecorder.state)) {
    alert('请先录制视频');
    return;
  }
    mediaRecorder.stop();

    // 停止并重置时间计数器
    stopTimer();

    // ✅ 停止评分更新
     // ✅ 清除定时器
    if (scoreInterval) {
        clearInterval(scoreInterval);
        scoreInterval = null;
    }
    
     // ✅ 更新主雷达图为平均值
    if (radarChartInstance) {
        updateRadarChart(); // ✅ 这里只调用一次，使用平均值
    } else {
        initRadarChart(); // 如果未初始化，则初始化
    }


    // ✅ 新增：获取视频流并关闭摄像头
    const video = document.getElementById('video-preview');
    const stream = video.srcObject;
    if (stream) {
      const tracks = stream.getTracks();
      tracks.forEach(track => track.stop()); // 停止所有轨道（包括摄像头和麦克风）
    }
    video.srcObject = null; // 清除视频源

  // 显示分析结果
  // 如果雷达图已存在，直接更新
        if (radarChartInstance) {
            updateRadarChart();
        } else {
            // 否则初始化图表
            const ctx = document.getElementById('radar-chart').getContext('2d');
            radarChartInstance = new Chart(ctx, {
                type: 'radar',
                data: {
                    labels: ratingLabels,
                    datasets: [{
                        label: '评分',
                        backgroundColor: 'rgba(76, 175, 80, 0.2)',
                        borderColor: 'rgba(76, 175, 80, 1)',
                        pointBackgroundColor: 'rgba(76, 175, 80, 1)',
                        pointBorderColor: '#fff',
                        pointHoverBackgroundColor: '#fff',
                        pointHoverBorderColor: 'rgba(76, 175, 80, 1)',
                        data:  calculateAverageScores(currentScores) // ✅ 初始化也用平均值
                    }]
                },
                options: {
                    scale: {
                        ticks: {
                            beginAtZero: true,
                            max: 10
                        }
                    }
                }
            });
        }
    
     // ✅ 允许访问分析页
    allowAnalysisAccess = true;

    showSection('analysis-results');
    

}

function handlePauseOrResume() {
    const btn = document.querySelector('button[onclick="handlePauseOrResume()"]');

    if (isPaused) {
        continueRecording();
        btn.textContent = '暂停录制';
    } else {
        pauseRecording();
        btn.textContent = '继续录制';
    }
}
   



  

function validateResumeFile(input) {
  const file = input.files[0];
  const errorDiv = document.getElementById('resume-error');
  const allowedTypes = ['application/pdf', 'text/pdf'];
  const maxSize = 10 * 1024 * 1024; // 10MB

  // 重置错误状态
  errorDiv.style.display = 'none';
  input.setCustomValidity('');

  if (!file) return true;

  // 文件类型验证
  if (!allowedTypes.includes(file.type)) {
    errorDiv.textContent = '仅支持 PDF 格式的简历文件';
    errorDiv.style.display = 'block';
    input.setCustomValidity('仅支持 PDF 文件');
    return false;
  }

  // 文件大小验证
  if (file.size > maxSize) {
    errorDiv.textContent = '文件大小不能超过 10MB';
    errorDiv.style.display = 'block';
    input.setCustomValidity('文件过大');
    return false;
  }

  return true;
}




// 全局变量扩展（已存在）
let currentScenario = ''; // 当前选择的岗位类型
let currentQuestionIndex = 0; // 当前题目索引


/**
 * 生成面试题目
 * @param {string} scenario - 岗位类型标识符（如 'ai-engineer'）
 * @returns {boolean} 是否成功生成题目
 */
function generateInterviewQuestion(scenario) {
  // 检查岗位类型是否有效
  if (!interviewQuestions.hasOwnProperty(scenario)) {
    console.error('无效的岗位类型:', scenario);
    return false;
  }

  // 设置当前场景和初始题目索引
  currentScenario = scenario;
  currentQuestionIndex = 0;

  // 获取题目容器元素
  const questionElement = document.getElementById('current-question');
  const questionNumberElement = document.getElementById('question-number');

  // 更新页面显示
  if (questionElement && questionNumberElement) {
    questionElement.textContent = interviewQuestions[scenario][0];
    questionNumberElement.textContent = 1;
    return true;
  }

  return false;
}

// 新增题目切换函数
function changeQuestion(direction) {
  const questions = interviewQuestions[currentScenario];
  if (!questions) return;
  
  currentQuestionIndex += direction;
  if (currentQuestionIndex < 0) currentQuestionIndex = 0;
  if (currentQuestionIndex >= questions.length) currentQuestionIndex = questions.length - 1;
  
  document.getElementById('current-question').textContent = questions[currentQuestionIndex];
  document.getElementById('question-number').textContent = currentQuestionIndex + 1;
}

function prevQuestion() {
  changeQuestion(-1);
}

function nextQuestion() {
  changeQuestion(1);
}

function generateResume() {
    const scenarioLabel = scenarioLabels[currentScenario] || currentScenario;
    const feedbackText = `
        智鉴 AI 面试助手 - 简历生成\n
        姓名：[请填写姓名]\n
        应聘岗位：${scenarioLabel}\n
        技能匹配度：★★★☆☆\n
        语言表达能力：★★★★☆\n
        创新能力：★★★☆☆\n
        其他特长：\n
        - 良好的沟通技巧\n
        - 快速学习能力强\n
        - 团队协作经验丰富\n
        \n
        根据面试表现，我们建议您加强基础知识理解和表达逻辑性。
    `;

    // 创建 Blob 下载简历文本
    const blob = new Blob([feedbackText], { type: 'text/plain' });
    const url = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.href = url;
    a.download = `${scenarioLabel}_简历.txt`;
    a.click();
    URL.revokeObjectURL(url);
}






//模拟ai实时打分
let scoreInterval;

function startRealTimeScoring() {
    // 模拟每 10 秒调整一次评分（例如来自 AI 实时识别）
    scoreInterval = setInterval(() => {
        // 模拟分数变化（可以替换为来自语音识别或姿态分析的结果）
        for (let i = 0; i < currentScores.length; i++) {
            const change = Math.floor(Math.random() * 3) - 1; // ±1 分
            currentScores[i] = Math.min(10, Math.max(0, currentScores[i] + change));
        }
        updateMiniRadarChart();   // 新增：迷你雷达图
    }, 5000);
}
//计算平均分
function calculateAverageScores(scoresArray) {
    const sum = scoresArray.reduce((acc, val) => acc + val, 0);
    const avg = sum / scoresArray.length;

    // 返回一个与原数组等长的数组，所有值为平均值
    return new Array(scoresArray.length).fill(avg);
}


//雷达图实时更新函数
let radarChartInstance = null; // 保存 Chart 实例

function updateRadarChart() {
    if (!radarChartInstance) return;

     const averageScores = calculateAverageScores(currentScores);

    radarChartInstance.data.datasets[0].data = averageScores;
    radarChartInstance.update();
    // 同步更新文本反馈
    const feedbackElement = document.getElementById('feedback-text');
    feedbackElement.innerText = `
知识专业水平: ${averageScores[0]}/10
技能匹配度: ${averageScores[1]}/10
语言表达能力: ${averageScores[2]}/10
逻辑思维能力: ${averageScores[3]}/10
创新能力: ${averageScores[4]}/10
应变抗压能力: ${averageScores[5]}/10
`;
}

//迷你雷达图
let miniRadarChartInstance = null;

function initMiniRadarChart() {
    const ctx = document.getElementById('mini-radar-chart').getContext('2d');

    miniRadarChartInstance = new Chart(ctx, {
        type: 'radar',
        data: {
            labels: ratingLabels,
            datasets: [{
                label: '实时评分',
                backgroundColor: 'rgba(46, 204, 113, 0.2)',
                borderColor: 'rgba(46, 204, 113, 1)',
                pointBackgroundColor: 'rgba(46, 204, 113, 1)',
                data: currentScores,
                fill: true
            }]
        },
        options: {
            responsive: true,
            maintainAspectRatio: false,
            scale: {
                ticks: {
                    beginAtZero: true,
                    max: 10,
                    stepSize: 2,
                    fontSize: 8 // 更小的字体
                },
                pointLabels: {
                    fontSize: 10 // 标签更小
                }
            },
            legend: {
                display: false
            },
            tooltips: {
                enabled: false
            }
        }
    });
}

//迷你雷达图更新函数
function updateMiniRadarChart() {
    if (!miniRadarChartInstance) return;

    miniRadarChartInstance.data.datasets[0].data = currentScores;
    miniRadarChartInstance.update();
}

//刷新页面函数
// function resetInterviewState() {
//     // 重置评分数据
//     currentScores = [8, 7, 9, 6, 5, 7]; // 恢复默认评分
//     if (radarChartInstance) {
//         radarChartInstance.destroy(); // 销毁旧的图表实例
//         radarChartInstance = null;
//     }

//     // 关闭视频流
//     const video = document.getElementById('video-preview');
//     const stream = video.srcObject;
//     if (stream) {
//         stream.getTracks().forEach(track => track.stop());
//     }
//     video.srcObject = null;

//     // 重置录制状态
//     if (mediaRecorder) {
//         mediaRecorder = null;
//     }
//     recordedChunks = [];
//     startTime = null;
//     if (timerInterval) clearInterval(timerInterval);
//     document.getElementById('recording-timer').textContent = '00:00';

//     // 重置权限控制
//     allowAnalysisAccess = false;

//     // 重置题目索引
//     currentScenario = '';
//     currentQuestionIndex = 0;

//     // 隐藏分析页
//     document.getElementById('analysis-results').style.display = 'none';
//     document.getElementById('mock-interview').style.display = 'none';
//     document.getElementById('video-recording').style.display = 'none';

//     // 显示初始界面
//     showSection('job-selection'); // 假设这是你的初始选择页
// }


function startInterview() {

    const scenarioSelect = document.getElementById('job-scenario');
    const resumeInput = document.getElementById('resume-upload');

    const scenario = scenarioSelect.value; // ✅ 在这里获取当前选择的值
    
    if (!scenario) {
        alert('请选择一个面试场景');
        return;
    }

    if (!['ai-engineer', 'big-data-analyst', 'iot-specialist', 'product-manager'].includes(scenario)) {
        alert('请选择有效的面试岗位');
        return; 
    }

    if (!resumeInput.files.length) {
        alert('请上传您的简历文件');
        return;
    }

    if (!validateResumeFile(resumeInput)) {
        return;
    }

    if (!generateInterviewQuestion(scenario)) {
        alert('无法加载题目，请检查选择的岗位');
        return;
    }


    // 显示模拟面试页面
    showSection('mock-interview'); // ✅ 正确跳转到面试题目页

    // 初始化摄像头
    document.getElementById('video-recording').style.display = 'block';
    initializeCamera();

    // 模拟面试结果
  const scenarioLabel = scenarioLabels[scenario] || scenario; // 获取中文名称，兜底显示英文
  

// 在 startInterview() 中添加：
initMiniRadarChart(); // 初始化迷你雷达图

  // 显示雷达图
 // 在 startInterview() 中：
document.getElementById('analysis-results').style.display = 'block';

// 如果已存在实例，则更新；否则初始化
if (radarChartInstance) {
    const averageScores = calculateAverageScores(currentScores);
    radarChartInstance.data.datasets[0].data = averageScores;
    radarChartInstance.update();
} else {
    const ctx = document.getElementById('radar-chart').getContext('2d');
    radarChartInstance = new Chart(ctx, {
        type: 'radar',
        data: {
            labels: ['知识专业水平', '技能匹配度', '语言表达能力', '逻辑思维能力', '创新能力', '应变抗压能力'],
            datasets: [{
                label: '平均评分',
                backgroundColor: 'rgba(76, 175, 80, 0.2)',
                borderColor: 'rgba(76, 175, 80, 1)',
                pointBackgroundColor: 'rgba(76, 175, 80, 1)',
                pointBorderColor: '#fff',
                pointHoverBackgroundColor: '#fff',
                pointHoverBorderColor: 'rgba(76, 175, 80, 1)',
                data: calculateAverageScores(currentScores) // 初始化就用平均值
            }]
        },
        options: {
            scale: {
                ticks: {
                    beginAtZero: true,
                    max: 10
                }
            }
        }
    });
}
  // ✅ 添加改进建议
const improvementTips = `
    <strong>改进建议：</strong><br/>
    - 加强基础知识的理解与应用<br/>
    - 提高表达清晰度和逻辑性<br/>
    - 多进行压力测试训练以增强应变能力
`;
document.getElementById('improvement-tips').innerHTML = improvementTips;

  document.getElementById('analysis-results').style.display = 'block';
  showSection('analysis-results');


    document.getElementById('analysis-results').style.display = 'none';
    document.getElementById('mock-interview').style.display = 'none';
    document.getElementById('video-recording').style.display = 'block';
    initializeCamera();
}




//ai对话部分函数
//模拟ai回答
function getAIResponse(userMessage) {
    const responses = {
        "你好": "您好！我是智鉴 AI 面试助手，有什么可以帮助您的？",
        "面试技巧": "面试时注意表达清晰、逻辑严谨，回答要结合实际经验。",
        "如何准备简历": "建议突出项目经验和技能匹配度，保持简洁明了。",
        "自我介绍": "请从学习经历、项目经验、职业规划等方面简要介绍自己。",
        "default": "这是个好问题，我会继续学习并提供更完善的建议。"
    };

    return responses[userMessage.toLowerCase()] || responses.default;
}



//消息发送函数
function sendMessage() {
    const input = document.getElementById('chat-input');
    const message = input.value.trim();
    if (!message) return;

    // 显示用户消息
    addMessage(message, 'user');

    // 清空输入框
    input.value = '';

    // 模拟 AI 回应延迟
    setTimeout(() => {
        const response = getAIResponse(message);
        addMessage(response, 'ai');
    }, 800);
}

//添加消息到页面函数
function addMessage(text, sender) {
    const container = document.getElementById('chat-container');
    const msgDiv = document.createElement('div');
    msgDiv.classList.add('message', sender === 'user' ? 'user-message' : 'ai-message');
    msgDiv.textContent = text;
    container.appendChild(msgDiv);

    // 自动滚动到底部
    container.scrollTop = container.scrollHeight;
}